package ev.ftw.gff;

/**
 * Clase que almacena información sobre un fragmento de ADN
 * 
 * @date 01.08.2012
 * @author Enrique Vázquez de Luis
 *
 */
public class Fragmento {
	
	/**
	 * Inicio del fragmento. Debe ser mayor o igual a 0
	 */
	int inicio; //Posición de inicio del fragmento
	/**
	 * Fin del fragmento. Debe ser mayor o igual al inicio
	 */
	int fin; //Posición de fin del fragmento
	/**
	 * Direccion de lectura del fragmento. Puede ser: </br>
	 * '+': Dirección positiva. </br>
	 * '-': Dirección negativa. </br>
	 * '.': No importa la dirección.
	 */
	char direccion; //Dirección en que se lee la cadena en el cromosoma
	
	/**
	 * Constructor por defecto
	 */
	public Fragmento(){
		this.inicio = 0;
		this.fin = 0;
		this.direccion = '.';
	}
	
	/**
	 * Constructor con parámetros
	 * 
	 * @date 01.08.2012
	 * @author Enrique Vázquez de Luis
	 * @param inicio Inicio del fragmento
	 * @param fin Fin del fragmento
	 * @param direccion Direccion del fragmento
	 */
	public Fragmento(int inicio, int fin, char direccion){
		this.setInicio(inicio);
		this.setFin(fin);
		this.setDireccion(direccion);
	}
	
	/**
	 * Asigna un inicio al fragmento.
	 * 
	 * @date 01.08.2012
	 * @author Enrique Vázquez de Luis
	 * @param inicio Inicio del fragmento. Debe ser positivo.
	 */
	public void setInicio(int inicio){
		if(inicio > 0) this.inicio = inicio;
		else this.inicio = 0;
	}
	
	/**
	 * Asigna un final al fragmento.
	 * 
	 * @date 01.08.2012
	 * @author Enrique Vázquez de Luis
	 * @param fin Final del fragmento. Debe ser mayor que el inicio.
	 */
	public void setFin(int fin){
		if(fin > this.inicio) this.fin = fin;
		else this.fin = this.inicio;
	}
	
	/**
	 * Asigna una dirección de lectura al fragmento.
	 * 
	 *  @date 01.08.2012
	 * @author Enrique Vázquez de Luis
	 * @param direccion Dirección de lectura. Si no es válida se pone '.'.
	 */
	public void setDireccion(char direccion){
		switch (direccion){
			case '+':
			case '-':
			case '.':
				this.direccion = direccion;
				break;
			default:
				this.direccion = '.';
				break;
		}
	}
	
	/**
	 * Devuelve el inicio del fragmento.
	 * 
	 * @date 01.08.2012
	 * @author Enrique Vázquez de Luis
	 * @return El inicio del fragmento.
	 */
	public int getInicio(){
		return this.inicio;
	}
	
	/**
	 * Devuelve el final del fragmento.
	 * 
	 * @date 01.08.2012
	 * @author Enrique Vázquez de Luis
	 * @return El final del fragmento.
	 */
	public int getFin(){
		return this.fin;
	}
	
	/**
	 * Devuelve la dirección del fragmento.
	 * 
	 * @date 01.08.2012
	 * @author Enrique Vázquez de Luis
	 * @return La dirección del fragmento.
	 */
	public char getDireccion(){
		return this.direccion;
	}
	
}
